package com.dys.testio03;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * @className: src.main.java.com.dys.testio03.FileInputStreamAndFileOutputStream
 * @description: FileInputStream, FileOutputStream完成非文本文件的复制
 * @author: pine cone
 * @version: v1.0.0
 * @createTime: 2024/08/15 下午8:53
 */
public class FileInputStreamAndFileOutputStream {
    /**
     * 这是一个main()方法,是应用程序的入口
     *
     * @param args 方法的形参列表,是一个字符串数组,包含了从命令行传递给程序的参数
     */
    public static void main(String[] args) throws IOException {
        new FileInputStreamAndFileOutputStream().bufferByteArrayReadAndWriteToFile();
    }

    /**
     * 一个字节一个字节读取和写入
     *
     * @throws IOException
     */
    public void oneByteReadAndWriteToFile() throws IOException {
        // 1.有一个源文件
        File f1 = new File("E:\\cert (1).png");
        // 2.有一个目标文件
        File f2 = new File("E:\\cert (2).png");
        // 3.有一根输入的管道 怼到 源文件上
        FileInputStream fis = new FileInputStream(f1);
        // 4.有一根输出的管道 怼到 目标文件上
        FileOutputStream fos = new FileOutputStream(f2);
        // 5.开始复制(边读编写)
        int n = fis.read();
        while (n != -1) {
            fos.write(n);
            n = fis.read();
        }
        // 关流
        fos.close();
        fis.close();
    }

    /**
     * 利用缓冲数组进行读取和写入
     *
     * @throws IOException
     */
    public void bufferByteArrayReadAndWriteToFile() throws IOException {
        // 1.有一个源文件
        File f1 = new File("E:\\cert (1).png");
        // 2.有一个目标文件
        File f2 = new File("E:\\cert (2).png");
        // 3.有一根管道 怼到 源文件上
        FileInputStream fis = new FileInputStream(f1);
        // 4.有一根管道 怼到 目标文件上
        FileOutputStream fos = new FileOutputStream(f2);
        // 5.开始复制动作（边读编写）
        byte[] buffer = new byte[1024 * 8];
        int n = fis.read(buffer);
        while (n != -1) {
            fos.write(buffer, 0, n);
            n = fis.read(buffer);
        }
        // 6.关流
        fos.close();
        fis.close();
    }
}
